// 包声明：表示这个类属于com.itheima.staticfield包，用于组织代码结构
package com.itheima.staticfield;

// 公共类定义：Test是一个公共类，可以被其他类访问
public class Test {
    // main方法：程序的入口点，所有Java程序都从这里开始执行
    // public: 公共访问权限，static: 静态方法，void: 无返回值
    // String[] args: 命令行参数数组
    public static void main(String[] args) {
        // 注释：说明这段代码的目标是学习静态变量的特点和访问机制
        // 目标：认识static修饰成员变量，特点、访问机制，搞清楚作用。
        
        // 1、类名.静态变量（推荐）
        // 直接通过类名访问静态变量，这是推荐的方式
        Student.name = "袁华";  // 为Student类的静态变量name赋值为"袁华"
        
        // 打印静态变量name的值，应该输出"袁华"
        System.out.println(Student.name);

        // 2、对象名.静态变量（不推荐）
        // 创建Student类的对象s1
        Student s1 = new Student();
        // 通过对象名访问静态变量（虽然语法正确，但不推荐）
        // 注意：这里实际上是修改了类的静态变量，会影响所有对象
        s1.name = "马冬梅";  // 此时所有对象访问name都会得到"马冬梅"

        // 创建第二个Student类的对象s2
        Student s2 = new Student();
        // 通过s2对象修改静态变量name
        s2.name = "秋雅";  // 所有对象访问name现在都会得到"秋雅"

        // 打印s1对象的name属性，由于是静态变量，会输出"秋雅"
        // 这里虽然用对象名访问，但实际访问的是类的静态变量
        System.out.println(s1.name); // 秋雅
        
        // 通过类名访问静态变量，输出"秋雅"
        System.out.println(Student.name); // 秋雅

        // 3、对象名.实例变量
        // 为s1对象的实例变量age赋值为23
        s1.age = 23;
        // 为s2对象的实例变量age赋值为18
        s2.age = 18;
        // 打印s1对象的age属性，输出23
        System.out.println(s1.age); // 23
        
        // 尝试通过类名访问实例变量（会报错！）
        // 实例变量必须通过对象名访问，不能通过类名访问
        // System.out.println(Student.age); // 报错！
    }  // main方法结束
}  // Test类结束
